﻿using System;
using System.Collections.Generic;
using Codice.CM.Common;
using UnityEngine;

namespace EditorFrameWork
{
    //负责管理和获取不同类型的字符串转换器 内部使用
    public abstract class StringConverter
    {
        private static Dictionary<Type, StringConverter> ConverterMap = new Dictionary<Type, StringConverter>()
        {
            {
                typeof(Rect), new Rect2StringConverter()
            },
            {
                typeof(bool), new Boolean2StringConverter()
            },
            {
                typeof(string), new String2StringConverter()
            },
        };

        public static StringConverter<T> Get<T>()
        {
            if (ConverterMap.TryGetValue(typeof(T), out var t))
            {
                return t as StringConverter<T>;
            }

            return default;
        }
    }

    //提供了将对象转换为字符串的方法，并定义了一个抽象方法 TryConvert 用于将字符串转换为对象。
    public abstract class StringConverter<T> : StringConverter
    {
        public virtual string ConvertToString(T t)
        {
            return t.ToString();
        }

        public abstract bool TryConvert(string self, out T result);
    }
}